package com.fidelizarte.web.ws;

import java.util.ArrayList;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fidelizarte.common.util.SeguridadesException;
import com.fidelizarte.ejb.persistence.dto.EmpresaDTO;
import com.fidelizarte.ejb.persistence.dto.CargoDTO;
import com.fidelizarte.ejb.persistence.dto.TipoCampaniaDTO;
import com.fidelizarte.ejb.persistence.entities.Empresa;
import com.fidelizarte.ejb.persistence.util.dto.EmpleadoDTO;
import com.fidelizarte.ejb.servicio.frontend.ServicioCommonRemote;

/**
 * Clase de los web services que ofrece servicios comunes para el sistema
 * @author jose Auquilla
 *
 */
@Path("/wsCommon")
public class WSCommon {
	private static final Logger log = LoggerFactory.getLogger(WSCommon.class);
	
    private EmpresaDTO empresa;
    private List<TipoCampaniaDTO> tiposCampania;
    private List<CargoDTO> cargos;
    private List<EmpresaDTO> empresas;
	ServicioCommonRemote servicioCommonEmpresa;

	/**
	 * Metodo de web services que obtiene las empresas asociados a la empresaMain 
	 * @param idEmpresaMain
	 * @return
	 * @throws NamingException
	 * @throws SeguridadesException 
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCommon/getEmpresaPorIdEmpresa/{idEmpresaMain}")
	public EmpresaDTO getEmpresaPorIdEmpresa(@PathParam("idEmpresaMain") Integer idEmpresaMain) throws NamingException, SeguridadesException {
		log.info("getEmpresaPorIdEmpresa web service");
		InitialContext context = new InitialContext();
		 servicioCommonEmpresa = (ServicioCommonRemote) context
		.lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioCommonImpl!com.fidelizarte.ejb.servicio.frontend.ServicioCommonRemote");
		try {
		
		empresa=servicioCommonEmpresa.getEmpresaPorIdEmpresa(idEmpresaMain);
		
		} catch (Exception e) {
			log.info("Error al obtener empresa por id  getEmpresasAsociadasPorIdEmpresa web service {}", e.getMessage());
			throw new SeguridadesException ("No se pudo obtener datos de la empresa solicitadad ");
		 
		}
		
		  return empresa;
		 

	}
	/**
	 * Metodo de web service que permite Obtener los cargos de las empresas asociadas a un id Una Principal principal
	 * @param idEmpresaMain
	 * @return
	 * @throws NamingException
	 */
	
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCommon/getCargosAsociadosPorIdEmpresa/{idEmpresaMain}")
	public List<CargoDTO> getCargosAsociadosPorIdEmpresa(@PathParam("idEmpresaMain") Integer idEmpresaMain) throws NamingException {
		log.info("getCargosAsociadosPorIdEmpresa web service");
		InitialContext context = new InitialContext();
		 servicioCommonEmpresa = (ServicioCommonRemote) context
		 .lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioCommonImpl!com.fidelizarte.ejb.servicio.frontend.ServicioCommonRemote");
		 try {
		
		 cargos=servicioCommonEmpresa.getCargosPorIdEmpresa(idEmpresaMain);
		 
		 } catch (SeguridadesException e) {
		 e.printStackTrace();
		 }
		
return this.cargos;
	}
	
	/**
	 * Metodo de web service que obtiene los tipos de campania asociado a la empresa pricipal
	 * @param idEmpresaMain
	 * @return
	 * @throws NamingException
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCommon/getTipoCampaniaAsociadasPorIdEmpresa/{idEmpresaMain}")
	public List<TipoCampaniaDTO> getTipoCampaniaAsociadasPorIdEmpresa(@PathParam("idEmpresaMain") Integer idEmpresaMain) throws NamingException {
		log.info("getTipoCampaniaAsociadasPorIdEmpresa web service");
		InitialContext context = new InitialContext();
		servicioCommonEmpresa = (ServicioCommonRemote) context
		 .lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioCommonImpl!com.fidelizarte.ejb.servicio.frontend.ServicioCommonRemote");
		try {
		
		tiposCampania=servicioCommonEmpresa.getTiposCampaniaAsociadasPorIdEmpresa(idEmpresaMain);
		 
		} catch (SeguridadesException e) {
		e.printStackTrace();
	 }
		
		 return tiposCampania;
		
	}
	
	/**
	 * Metodo de web service que obtiene los empleados registrados de una empresa
	 * @param idEmpresaMain
	 * @return
	 * @throws NamingException
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCommon/getEmpleadosPorIdEmpresa/{idEmpresa}")
	public List<EmpleadoDTO> getEmpleadosPorIdEmpresa(@PathParam("idEmpresa") Integer idEmpresa) throws NamingException, SeguridadesException {
		log.info("getEmpleadosPorIdEmpresa web service");
		InitialContext context = new InitialContext();
		 servicioCommonEmpresa = (ServicioCommonRemote) context
		 .lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioCommonImpl!com.fidelizarte.ejb.servicio.frontend.ServicioCommonRemote");
		 List<EmpleadoDTO> empleados= new ArrayList<EmpleadoDTO>();
		 try {
			 
		 empleados=servicioCommonEmpresa.getEmpleadoPorIdEmpresa(idEmpresa);
		 } catch (Exception e) {
				log.info("Error al obtener empleados por id empresa  getEmpleadosPorIdEmpresa web service {}", e.getMessage());
				throw new SeguridadesException ("No se pudo obtener datos de los empleados de la empresa solicitadad ");
			 
			}
		return empleados;
		 
	}
	/**
	 * Metodo web service que permite obtener todos los tipos de premios de una empresa 
	 * @param idEmpresaMain
	 * @return
	 * @throws NamingException
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCommon/getTipoPremioPorIdEmpresa/{idEmpresaMain}")
	public boolean getTipoPremioPorIdEmpresa(@PathParam("idEmpresaMain") Integer idEmpresaMain) throws NamingException {
		log.info("getTipoPremioPorIdEmpresa web service");
		InitialContext context = new InitialContext();
		// servicioCommonEmpresa = (ServicioCommonRemote) context
		// .lookup("ejb:mpoEAP/mpoEJB/ServicioClienteImpl!com.mpo.ejb.servicio.frontend.ServicioClienteRemote");
		// try {
		
		// tiposPremio=servicioCommonEmpresa.getTipoPremioPorIdEmpresa(idEmpresaMain);
		// )
		// } catch (SeguridadesException e) {
		// e.printStackTrace();
		// }
		/**
		 * return tiposPremio;
		 */
return true;
	}
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCommon/getEmpresasAsociadasPorIdEmpresa/{idEmpresaMain}")
	public List<EmpresaDTO> getEmpresasAsociadasPorIdEmpresa(@PathParam("idEmpresaMain") Integer idEmpresaMain) throws NamingException, SeguridadesException {
		log.info("getEmpresasAsociadasPorIdEmpresa web service");
		InitialContext context = new InitialContext();
		 servicioCommonEmpresa = (ServicioCommonRemote) context
		.lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioCommonImpl!com.fidelizarte.ejb.servicio.frontend.ServicioCommonRemote");
		try {
		
		empresas=servicioCommonEmpresa.getEmpresasAsociadasPorIdEmpresa(idEmpresaMain);
		
		} catch (Exception e) {
			log.info("Error al obtener empresa por id  getEmpresasAsociadasPorIdEmpresa web service {}", e.getMessage());
			throw new SeguridadesException ("No se pudo obtener datos de la empresa solicitadad ");
		 
		}
		
		  return empresas;
		 

	}
	/**
	 *Metodo de ws que permite ver si un usuario esta registrado  con un numero de cedula en el sistema 
	 * @param ci
	 * @return
	 * @throws NamingException
	 * @throws SeguridadesException
	 */
	@GET()
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/datosCommon/getPersonaPorCedula/{ci}")
	public Boolean verExistenciaCedula(@PathParam("ci") String ci) throws NamingException, SeguridadesException {
		log.info("verExistenciaCedula web service");
		Boolean ExisteCedula=true;
		InitialContext context = new InitialContext();
		
		 servicioCommonEmpresa = (ServicioCommonRemote) context
		.lookup("ejb:fidelizarteEAP/fidelizarteEJB/ServicioCommonImpl!com.fidelizarte.ejb.servicio.frontend.ServicioCommonRemote");
		try {
		
			ExisteCedula=servicioCommonEmpresa.verExistenciaCedula(ci);
		
		} catch (Exception e) {
			log.info("Error al obtener empresa por id  getEmpresasAsociadasPorIdEmpresa web service {}", e.getMessage());
			throw new SeguridadesException ("No se pudo obtener datos de la empresa solicitadad ");
		 
		}
		
		  return ExisteCedula;
		 

	}
}
